{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DecisionTreeDiscretiser\n",
    "\n",
    "The DecisionTreeDiscretiser() divides continuous numerical variables into discrete, finite, values estimated by a decision tree.\n",
    "\n",
    "The methods is inspired by the following article from the winners of the KDD 2009 competition:\n",
    "http://www.mtome.com/Publications/CiML/CiML-v3-book.pdf\n",
    "\n",
    "**Note**\n",
    "\n",
    "For this demonstration, we use the Ames House Prices dataset produced by Professor Dean De Cock:\n",
    "\n",
    "Dean De Cock (2011) Ames, Iowa: Alternative to the Boston Housing\n",
    "Data as an End of Semester Regression Project, Journal of Statistics Education, Vol.19, No. 3\n",
    "\n",
    "http://jse.amstat.org/v19n3/decock.pdf\n",
    "\n",
    "https://www.tandfonline.com/doi/abs/10.1080/10691898.2011.11889627\n",
    "\n",
    "The version of the dataset used in this notebook can be obtained from [Kaggle](https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "from feature_engine.discretisation import DecisionTreeDiscretiser\n",
    "\n",
    "plt.rcParams[\"figure.figsize\"] = [15,5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## DecisionTreeDiscretiser with Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Id</th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>MSZoning</th>\n",
       "      <th>LotFrontage</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>Street</th>\n",
       "      <th>Alley</th>\n",
       "      <th>LotShape</th>\n",
       "      <th>LandContour</th>\n",
       "      <th>Utilities</th>\n",
       "      <th>...</th>\n",
       "      <th>PoolArea</th>\n",
       "      <th>PoolQC</th>\n",
       "      <th>Fence</th>\n",
       "      <th>MiscFeature</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "      <th>SaleType</th>\n",
       "      <th>SaleCondition</th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>65.0</td>\n",
       "      <td>8450</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>208500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>20</td>\n",
       "      <td>RL</td>\n",
       "      <td>80.0</td>\n",
       "      <td>9600</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>2007</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>181500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>68.0</td>\n",
       "      <td>11250</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>223500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>70</td>\n",
       "      <td>RL</td>\n",
       "      <td>60.0</td>\n",
       "      <td>9550</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2006</td>\n",
       "      <td>WD</td>\n",
       "      <td>Abnorml</td>\n",
       "      <td>140000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>84.0</td>\n",
       "      <td>14260</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>250000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 81 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Id  MSSubClass MSZoning  LotFrontage  LotArea Street Alley LotShape  \\\n",
       "0   1          60       RL         65.0     8450   Pave   NaN      Reg   \n",
       "1   2          20       RL         80.0     9600   Pave   NaN      Reg   \n",
       "2   3          60       RL         68.0    11250   Pave   NaN      IR1   \n",
       "3   4          70       RL         60.0     9550   Pave   NaN      IR1   \n",
       "4   5          60       RL         84.0    14260   Pave   NaN      IR1   \n",
       "\n",
       "  LandContour Utilities  ... PoolArea PoolQC Fence MiscFeature MiscVal MoSold  \\\n",
       "0         Lvl    AllPub  ...        0    NaN   NaN         NaN       0      2   \n",
       "1         Lvl    AllPub  ...        0    NaN   NaN         NaN       0      5   \n",
       "2         Lvl    AllPub  ...        0    NaN   NaN         NaN       0      9   \n",
       "3         Lvl    AllPub  ...        0    NaN   NaN         NaN       0      2   \n",
       "4         Lvl    AllPub  ...        0    NaN   NaN         NaN       0     12   \n",
       "\n",
       "  YrSold  SaleType  SaleCondition  SalePrice  \n",
       "0   2008        WD         Normal     208500  \n",
       "1   2007        WD         Normal     181500  \n",
       "2   2008        WD         Normal     223500  \n",
       "3   2006        WD        Abnorml     140000  \n",
       "4   2008        WD         Normal     250000  \n",
       "\n",
       "[5 rows x 81 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv('housing.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_train : (1022, 79)\n",
      "X_test : (438, 79)\n"
     ]
    }
   ],
   "source": [
    "# let's separate into training and testing set\n",
    "X = data.drop([\"Id\", \"SalePrice\"], axis=1)\n",
    "y = data.SalePrice\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    X, y, test_size=0.3, random_state=0)\n",
    "\n",
    "print(\"X_train :\", X_train.shape)\n",
    "print(\"X_test :\", X_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# we will discretise two continuous variables\n",
    "\n",
    "X_train[[\"LotArea\", 'GrLivArea']].hist(bins=50)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The DecisionTreeDiscretiser() works only with numerical variables.\n",
    "A list of variables can be passed as an argument. Alternatively, the\n",
    "discretiser will automatically select and transform all numerical variables.\n",
    "\n",
    "The DecisionTreeDiscretiser() first trains a decision tree for each variable,\n",
    "fit.\n",
    "\n",
    "The DecisionTreeDiscretiser() then transforms the variables, that is,\n",
    "makes predictions based on the variable values, using the trained decision\n",
    "tree, transform."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeDiscretiser(cv=3, param_grid={'max_depth': [1, 2, 3, 4]},\n",
       "                        random_state=29, regression=True,\n",
       "                        scoring='neg_mean_squared_error',\n",
       "                        variables=['LotArea', 'GrLivArea'])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "'''\n",
    "Parameters\n",
    "----------\n",
    "\n",
    "cv : int, default=3\n",
    "    Desired number of cross-validation fold to be used to fit the decision\n",
    "    tree.\n",
    "\n",
    "scoring: str, default='neg_mean_squared_error'\n",
    "    Desired metric to optimise the performance for the tree. Comes from\n",
    "    sklearn metrics. See DecisionTreeRegressor or DecisionTreeClassifier\n",
    "    model evaluation documentation for more options:\n",
    "    https://scikit-learn.org/stable/modules/model_evaluation.html\n",
    "\n",
    "variables : list\n",
    "    The list of numerical variables that will be transformed. If None, the\n",
    "    discretiser will automatically select all numerical type variables.\n",
    "\n",
    "regression : boolean, default=True\n",
    "    Indicates whether the discretiser should train a regression or a classification\n",
    "    decision tree.\n",
    "\n",
    "param_grid : dictionary, default=None\n",
    "    The list of parameters over which the decision tree should be optimised\n",
    "    during the grid search. The param_grid can contain any of the permitted\n",
    "    parameters for Scikit-learn's DecisionTreeRegressor() or\n",
    "    DecisionTreeClassifier().\n",
    "\n",
    "    If None, then param_grid = {'max_depth': [1, 2, 3, 4]}\n",
    "\n",
    "random_state : int, default=None\n",
    "    The random_state to initialise the training of the decision tree. It is one\n",
    "    of the parameters of the Scikit-learn's DecisionTreeRegressor() or\n",
    "    DecisionTreeClassifier(). For reproducibility it is recommended to set\n",
    "    the random_state to an integer.\n",
    "'''\n",
    "\n",
    "treeDisc = DecisionTreeDiscretiser(cv=3,\n",
    "                                   scoring='neg_mean_squared_error',\n",
    "                                   variables=['LotArea', 'GrLivArea'],\n",
    "                                   regression=True,\n",
    "                                   random_state=29)\n",
    "\n",
    "# the DecisionTreeDiscretiser needs the target for fitting\n",
    "treeDisc.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'LotArea': GridSearchCV(cv=3, error_score=nan,\n",
       "              estimator=DecisionTreeRegressor(ccp_alpha=0.0, criterion='mse',\n",
       "                                              max_depth=None, max_features=None,\n",
       "                                              max_leaf_nodes=None,\n",
       "                                              min_impurity_decrease=0.0,\n",
       "                                              min_impurity_split=None,\n",
       "                                              min_samples_leaf=1,\n",
       "                                              min_samples_split=2,\n",
       "                                              min_weight_fraction_leaf=0.0,\n",
       "                                              presort='deprecated',\n",
       "                                              random_state=29, splitter='best'),\n",
       "              iid='deprecated', n_jobs=None,\n",
       "              param_grid={'max_depth': [1, 2, 3, 4]}, pre_dispatch='2*n_jobs',\n",
       "              refit=True, return_train_score=False,\n",
       "              scoring='neg_mean_squared_error', verbose=0),\n",
       " 'GrLivArea': GridSearchCV(cv=3, error_score=nan,\n",
       "              estimator=DecisionTreeRegressor(ccp_alpha=0.0, criterion='mse',\n",
       "                                              max_depth=None, max_features=None,\n",
       "                                              max_leaf_nodes=None,\n",
       "                                              min_impurity_decrease=0.0,\n",
       "                                              min_impurity_split=None,\n",
       "                                              min_samples_leaf=1,\n",
       "                                              min_samples_split=2,\n",
       "                                              min_weight_fraction_leaf=0.0,\n",
       "                                              presort='deprecated',\n",
       "                                              random_state=29, splitter='best'),\n",
       "              iid='deprecated', n_jobs=None,\n",
       "              param_grid={'max_depth': [1, 2, 3, 4]}, pre_dispatch='2*n_jobs',\n",
       "              refit=True, return_train_score=False,\n",
       "              scoring='neg_mean_squared_error', verbose=0)}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# the binner_dict_ contains the best decision tree for each variable\n",
    "treeDisc.binner_dict_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_t = treeDisc.transform(X_train)\n",
    "test_t = treeDisc.transform(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([246372.77165354, 149540.32663317, 122286.38839286,  88631.59375   ,\n",
       "       165174.20895522, 198837.68608414, 312260.5       , 509937.5       ])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# the below account for the best obtained bins, aka, the tree predictions\n",
    "\n",
    "train_t['GrLivArea'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([181711.59622642, 145405.30751708, 213802.86363636, 251997.13333333])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# the below account for the best obtained bins, aka, the tree predictions\n",
    "\n",
    "train_t['LotArea'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>LotArea</th>\n",
       "      <th>GrLivArea</th>\n",
       "      <th>LotArea_binned</th>\n",
       "      <th>GrLivArea_binned</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>9375</td>\n",
       "      <td>2034</td>\n",
       "      <td>181711.596226</td>\n",
       "      <td>246372.771654</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>682</th>\n",
       "      <td>2887</td>\n",
       "      <td>1291</td>\n",
       "      <td>145405.307517</td>\n",
       "      <td>149540.326633</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>960</th>\n",
       "      <td>7207</td>\n",
       "      <td>858</td>\n",
       "      <td>145405.307517</td>\n",
       "      <td>122286.388393</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1384</th>\n",
       "      <td>9060</td>\n",
       "      <td>1258</td>\n",
       "      <td>181711.596226</td>\n",
       "      <td>149540.326633</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1100</th>\n",
       "      <td>8400</td>\n",
       "      <td>438</td>\n",
       "      <td>145405.307517</td>\n",
       "      <td>88631.593750</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      LotArea  GrLivArea  LotArea_binned  GrLivArea_binned\n",
       "64       9375       2034   181711.596226     246372.771654\n",
       "682      2887       1291   145405.307517     149540.326633\n",
       "960      7207        858   145405.307517     122286.388393\n",
       "1384     9060       1258   181711.596226     149540.326633\n",
       "1100     8400        438   145405.307517      88631.593750"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# here I put side by side the original variable and the transformed variable\n",
    "\n",
    "tmp = pd.concat([X_train[[\"LotArea\", 'GrLivArea']],\n",
    "                 train_t[[\"LotArea\", 'GrLivArea']]], axis=1)\n",
    "\n",
    "tmp.columns = [\"LotArea\", 'GrLivArea', \"LotArea_binned\", 'GrLivArea_binned']\n",
    "\n",
    "tmp.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# in  equal frequency discretisation, we obtain the same amount of observations\n",
    "# in each one of the bins.\n",
    "\n",
    "plt.subplot(1,2,1)\n",
    "tmp.groupby('GrLivArea_binned')['GrLivArea'].count().plot.bar()\n",
    "plt.ylabel('Number of houses')\n",
    "plt.title('Number of houses per discrete value')\n",
    "\n",
    "plt.subplot(1,2,2)\n",
    "tmp.groupby('LotArea_binned')['LotArea'].count().plot.bar()\n",
    "plt.ylabel('Number of houses')\n",
    "plt.ylabel('Number of houses')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## DecisionTreeDiscretiser with binary classification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load titanic dataset from OpenML\n",
    "\n",
    "def load_titanic():\n",
    "    data = pd.read_csv('https://www.openml.org/data/get_csv/16826755/phpMYEkMl')\n",
    "    data = data.replace('?', np.nan)\n",
    "    data['cabin'] = data['cabin'].astype(str).str[0]\n",
    "    data['pclass'] = data['pclass'].astype('O')\n",
    "    data['embarked'].fillna('C', inplace=True)\n",
    "    data['fare'] = data['fare'].astype('float').fillna(0)\n",
    "    data['age'] = data['age'].astype('float').fillna(0)\n",
    "    data.drop(['name', 'ticket', 'boat', 'home.dest'], axis=1, inplace=True)\n",
    "    return data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pclass</th>\n",
       "      <th>survived</th>\n",
       "      <th>sex</th>\n",
       "      <th>age</th>\n",
       "      <th>sibsp</th>\n",
       "      <th>parch</th>\n",
       "      <th>fare</th>\n",
       "      <th>cabin</th>\n",
       "      <th>embarked</th>\n",
       "      <th>body</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>29.0000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211.3375</td>\n",
       "      <td>B</td>\n",
       "      <td>S</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>0.9167</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>151.5500</td>\n",
       "      <td>C</td>\n",
       "      <td>S</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>female</td>\n",
       "      <td>2.0000</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>151.5500</td>\n",
       "      <td>C</td>\n",
       "      <td>S</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>151.5500</td>\n",
       "      <td>C</td>\n",
       "      <td>S</td>\n",
       "      <td>135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>female</td>\n",
       "      <td>25.0000</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>151.5500</td>\n",
       "      <td>C</td>\n",
       "      <td>S</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  pclass  survived     sex      age  sibsp  parch      fare cabin embarked  \\\n",
       "0      1         1  female  29.0000      0      0  211.3375     B        S   \n",
       "1      1         1    male   0.9167      1      2  151.5500     C        S   \n",
       "2      1         0  female   2.0000      1      2  151.5500     C        S   \n",
       "3      1         0    male  30.0000      1      2  151.5500     C        S   \n",
       "4      1         0  female  25.0000      1      2  151.5500     C        S   \n",
       "\n",
       "  body  \n",
       "0  NaN  \n",
       "1  NaN  \n",
       "2  NaN  \n",
       "3  135  \n",
       "4  NaN  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# load data\n",
    "data = load_titanic()\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(916, 9)\n",
      "(393, 9)\n"
     ]
    }
   ],
   "source": [
    "# let's separate into training and testing set\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(data.drop(['survived'], axis=1),\n",
    "                                                    data['survived'],\n",
    "                                                    test_size=0.3, \n",
    "                                                    random_state=0)\n",
    "\n",
    "print(X_train.shape)\n",
    "print(X_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "fare    float64\n",
       "age     float64\n",
       "dtype: object"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#this discretiser transforms the numerical variables\n",
    "X_train[['fare', 'age']].dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeDiscretiser(cv=3, param_grid={'max_depth': [1, 2]}, random_state=29,\n",
       "                        regression=False, scoring='roc_auc',\n",
       "                        variables=['fare', 'age'])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "treeDisc = DecisionTreeDiscretiser(cv=3,\n",
    "                                   scoring='roc_auc',\n",
    "                                   variables=['fare', 'age'],\n",
    "                                   regression=False,\n",
    "                                   param_grid={'max_depth': [1, 2]},\n",
    "                                   random_state=29,\n",
    "                                   )\n",
    "\n",
    "treeDisc.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'fare': GridSearchCV(cv=3, error_score=nan,\n",
       "              estimator=DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None,\n",
       "                                               criterion='gini', max_depth=None,\n",
       "                                               max_features=None,\n",
       "                                               max_leaf_nodes=None,\n",
       "                                               min_impurity_decrease=0.0,\n",
       "                                               min_impurity_split=None,\n",
       "                                               min_samples_leaf=1,\n",
       "                                               min_samples_split=2,\n",
       "                                               min_weight_fraction_leaf=0.0,\n",
       "                                               presort='deprecated',\n",
       "                                               random_state=29,\n",
       "                                               splitter='best'),\n",
       "              iid='deprecated', n_jobs=None, param_grid={'max_depth': [1, 2]},\n",
       "              pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n",
       "              scoring='roc_auc', verbose=0),\n",
       " 'age': GridSearchCV(cv=3, error_score=nan,\n",
       "              estimator=DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None,\n",
       "                                               criterion='gini', max_depth=None,\n",
       "                                               max_features=None,\n",
       "                                               max_leaf_nodes=None,\n",
       "                                               min_impurity_decrease=0.0,\n",
       "                                               min_impurity_split=None,\n",
       "                                               min_samples_leaf=1,\n",
       "                                               min_samples_split=2,\n",
       "                                               min_weight_fraction_leaf=0.0,\n",
       "                                               presort='deprecated',\n",
       "                                               random_state=29,\n",
       "                                               splitter='best'),\n",
       "              iid='deprecated', n_jobs=None, param_grid={'max_depth': [1, 2]},\n",
       "              pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n",
       "              scoring='roc_auc', verbose=0)}"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "treeDisc.binner_dict_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_t = treeDisc.transform(X_train)\n",
    "test_t = treeDisc.transform(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.41295547, 0.26857143])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# the below account for the best obtained bins\n",
    "# in this case, the tree has found that dividing the data in 6 bins is enough\n",
    "train_t['age'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.42379182, 0.26778243, 0.52307692, 0.74038462])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# the below account for the best obtained bins\n",
    "# in this case, the tree has found that dividing the data in 8 bins is enough\n",
    "train_t['fare'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fare</th>\n",
       "      <th>age</th>\n",
       "      <th>fare_binned</th>\n",
       "      <th>age_binned</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>501</th>\n",
       "      <td>19.5000</td>\n",
       "      <td>13.0</td>\n",
       "      <td>0.423792</td>\n",
       "      <td>0.412955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>588</th>\n",
       "      <td>23.0000</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.423792</td>\n",
       "      <td>0.412955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>402</th>\n",
       "      <td>13.8583</td>\n",
       "      <td>30.0</td>\n",
       "      <td>0.267782</td>\n",
       "      <td>0.412955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1193</th>\n",
       "      <td>7.7250</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.267782</td>\n",
       "      <td>0.268571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>686</th>\n",
       "      <td>7.7250</td>\n",
       "      <td>22.0</td>\n",
       "      <td>0.267782</td>\n",
       "      <td>0.412955</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         fare   age  fare_binned  age_binned\n",
       "501   19.5000  13.0     0.423792    0.412955\n",
       "588   23.0000   4.0     0.423792    0.412955\n",
       "402   13.8583  30.0     0.267782    0.412955\n",
       "1193   7.7250   0.0     0.267782    0.268571\n",
       "686    7.7250  22.0     0.267782    0.412955"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# here I put side by side the original variable and the transformed variable\n",
    "\n",
    "tmp = pd.concat([X_train[[\"fare\", 'age']], train_t[[\"fare\", 'age']]], axis=1)\n",
    "\n",
    "tmp.columns = [\"fare\", 'age', \"fare_binned\", 'age_binned']\n",
    "\n",
    "tmp.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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N2xDvX5ERMRLJmlbqs7TFrafkHQJcDOw7jA/Mq5+7pN/5VssShs537aH2D9khrSRMRZlGGfEyFkWuK/e3vNFnncusG/PvLqNF/K6b5e0gqQlgV2BKxc16ItkuIxqyCiS1qcaHhMREfG/tSzwaN3RW4dq6OZSwDaSlpc0nmqo5IDzgH0GHkjaaCGvv4ukJSStCGwLzByBzMNl6G0jdwCWH4H3iuirdPYiRs5hwDclXQks9iLPm0o1xHNOPYF86kJe9wrg51TDUk6zPXgI5//GcBl+AEyoh2/+CzBjBN4rIiK6azowvm5XpgJXUX0xegjwO+AC4Ebgsfr5+wGT6kJhNwKfWMjrzwDOql93al2Jc1ENl+FrwNaSZlNNh7h7BN4roq+04O51RERERET/SZpge159Z+9XwE9s/6p0roi2yZ29iIiIiGjawXVBsRuAO4AzCueJaKXc2YsYBSRtB3xr0O47bO821PMjIiK6QtJewKcH7b7S9j+XyBMxlqSzFxERERER0UIZxhkREREREdFC6exFRERERES0UDp7ERERERERLZTOXkRERERERAulsxcREREREdFC/x/oDiRbYhSXkgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplot(1,2,1)\n",
    "tmp.groupby('fare_binned')['fare'].count().plot.bar()\n",
    "plt.ylabel('Number of houses')\n",
    "plt.title('Number of houses per discrete value')\n",
    "\n",
    "plt.subplot(1,2,2)\n",
    "tmp.groupby('age_binned')['age'].count().plot.bar()\n",
    "plt.ylabel('Number of houses')\n",
    "plt.title('Number of houses per discrete value')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# The DecisionTreeDiscretiser() returns values which show\n",
    "# a monotonic relationship with target\n",
    "\n",
    "pd.concat([test_t, y_test], axis=1).groupby(\n",
    "    'age')['survived'].mean().plot(figsize=(6, 4))\n",
    "\n",
    "plt.ylabel(\"Mean of target\")\n",
    "plt.title(\"Relationship between fare and target\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# The DecisionTreeDiscretiser() returns values which show\n",
    "# a monotonic relationship with target\n",
    "\n",
    "pd.concat([test_t, y_test], axis=1).groupby(\n",
    "    'fare')['survived'].mean().plot(figsize=(6, 4))\n",
    "\n",
    "plt.ylabel(\"Mean of target\")\n",
    "plt.title(\"Relationship between fare and target\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## DecisionTreeDiscretiser for Multi-class classification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "      <th>type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5.1</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \\\n",
       "0                5.1               3.5                1.4               0.2   \n",
       "1                4.9               3.0                1.4               0.2   \n",
       "2                4.7               3.2                1.3               0.2   \n",
       "3                4.6               3.1                1.5               0.2   \n",
       "4                5.0               3.6                1.4               0.2   \n",
       "\n",
       "   type  \n",
       "0     0  \n",
       "1     0  \n",
       "2     0  \n",
       "3     0  \n",
       "4     0  "
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load iris dataset from sklearn\n",
    "from sklearn.datasets import load_iris\n",
    "\n",
    "data = pd.DataFrame(load_iris().data, \n",
    "                    columns=load_iris().feature_names).join(\n",
    "    pd.Series(load_iris().target, name='type'))\n",
    "\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.type.unique() # 3 - class classification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(105, 4)\n",
      "(45, 4)\n"
     ]
    }
   ],
   "source": [
    "# let's separate into training and testing set\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(data.drop('type', axis=1),\n",
    "                                                    data['type'],\n",
    "                                                    test_size=0.3,\n",
    "                                                    random_state=0)\n",
    "\n",
    "print(X_train.shape)\n",
    "print(X_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sepal length (cm)    float64\n",
       "sepal width (cm)     float64\n",
       "dtype: object"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#selected two numerical variables\n",
    "X_train[['sepal length (cm)', 'sepal width (cm)']].dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeDiscretiser(cv=3, param_grid={'max_depth': [1, 2, 3, 4]},\n",
       "                        random_state=29, regression=False, scoring='accuracy',\n",
       "                        variables=['sepal length (cm)', 'sepal width (cm)'])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "treeDisc = DecisionTreeDiscretiser(cv=3,\n",
    "                                   scoring='accuracy',\n",
    "                                   variables=[\n",
    "                                       'sepal length (cm)', 'sepal width (cm)'],\n",
    "                                   regression=False,\n",
    "                                   random_state=29,\n",
    "                                   )\n",
    "\n",
    "treeDisc.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'sepal length (cm)': GridSearchCV(cv=3, error_score=nan,\n",
       "              estimator=DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None,\n",
       "                                               criterion='gini', max_depth=None,\n",
       "                                               max_features=None,\n",
       "                                               max_leaf_nodes=None,\n",
       "                                               min_impurity_decrease=0.0,\n",
       "                                               min_impurity_split=None,\n",
       "                                               min_samples_leaf=1,\n",
       "                                               min_samples_split=2,\n",
       "                                               min_weight_fraction_leaf=0.0,\n",
       "                                               presort='deprecated',\n",
       "                                               random_state=29,\n",
       "                                               splitter='best'),\n",
       "              iid='deprecated', n_jobs=None,\n",
       "              param_grid={'max_depth': [1, 2, 3, 4]}, pre_dispatch='2*n_jobs',\n",
       "              refit=True, return_train_score=False, scoring='accuracy',\n",
       "              verbose=0),\n",
       " 'sepal width (cm)': GridSearchCV(cv=3, error_score=nan,\n",
       "              estimator=DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None,\n",
       "                                               criterion='gini', max_depth=None,\n",
       "                                               max_features=None,\n",
       "                                               max_leaf_nodes=None,\n",
       "                                               min_impurity_decrease=0.0,\n",
       "                                               min_impurity_split=None,\n",
       "                                               min_samples_leaf=1,\n",
       "                                               min_samples_split=2,\n",
       "                                               min_weight_fraction_leaf=0.0,\n",
       "                                               presort='deprecated',\n",
       "                                               random_state=29,\n",
       "                                               splitter='best'),\n",
       "              iid='deprecated', n_jobs=None,\n",
       "              param_grid={'max_depth': [1, 2, 3, 4]}, pre_dispatch='2*n_jobs',\n",
       "              refit=True, return_train_score=False, scoring='accuracy',\n",
       "              verbose=0)}"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "treeDisc.binner_dict_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_t = treeDisc.transform(X_train)\n",
    "test_t = treeDisc.transform(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>sepalLen_binned</th>\n",
       "      <th>sepalWid_binned</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>5.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.125000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>116</th>\n",
       "      <td>6.5</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.296296</td>\n",
       "      <td>0.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>6.7</td>\n",
       "      <td>3.3</td>\n",
       "      <td>0.296296</td>\n",
       "      <td>0.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>119</th>\n",
       "      <td>6.0</td>\n",
       "      <td>2.2</td>\n",
       "      <td>0.296296</td>\n",
       "      <td>0.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>6.7</td>\n",
       "      <td>2.5</td>\n",
       "      <td>0.296296</td>\n",
       "      <td>0.434783</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     sepal length (cm)  sepal width (cm)  sepalLen_binned  sepalWid_binned\n",
       "60                 5.0               2.0         0.125000         1.000000\n",
       "116                6.5               3.0         0.296296         0.250000\n",
       "144                6.7               3.3         0.296296         0.200000\n",
       "119                6.0               2.2         0.296296         0.500000\n",
       "108                6.7               2.5         0.296296         0.434783"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# here I put side by side the original variable and the transformed variable\n",
    "tmp = pd.concat([X_train[['sepal length (cm)', 'sepal width (cm)']],\n",
    "                 train_t[['sepal length (cm)', 'sepal width (cm)']]], axis=1)\n",
    "\n",
    "tmp.columns = ['sepal length (cm)', 'sepal width (cm)',\n",
    "               'sepalLen_binned', 'sepalWid_binned']\n",
    "\n",
    "tmp.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplot(1, 2, 1)\n",
    "tmp.groupby('sepalLen_binned')['sepal length (cm)'].count().plot.bar()\n",
    "plt.ylabel('Number of species')\n",
    "plt.title('Number of observations per discrete value')\n",
    "\n",
    "plt.subplot(1, 2, 2)\n",
    "tmp.groupby('sepalWid_binned')['sepal width (cm)'].count().plot.bar()\n",
    "plt.ylabel('Number of species')\n",
    "plt.title('Number of observations per discrete value')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "fengine",
   "language": "python",
   "name": "fengine"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.2"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
